package cn.iocoder.yudao.module.crossborder.logistics.service;

import cn.iocoder.yudao.module.crossborder.logistics.api.dto.LogisticsDTO;
import cn.iocoder.yudao.module.crossborder.logistics.api.dto.TrackingDTO;

import java.math.BigDecimal;
import java.util.List;

/**
 * 物流管理 Service 接口
 *
 * @author LHL
 */
public interface LogisticsService {

    /**
     * 获得物流记录
     *
     * @param id 编号
     * @return 物流记录
     */
    LogisticsDTO getLogistics(Long id);

    /**
     * 获得物流记录列表
     *
     * @param ids 编号列表
     * @return 物流记录列表
     */
    List<LogisticsDTO> getLogisticsList(List<Long> ids);

    /**
     * 创建物流记录
     *
     * @param logistics 物流记录
     * @return 编号
     */
    Long createLogistics(LogisticsDTO logistics);

    /**
     * 获取物流跟踪信息
     *
     * @param trackingNumber 跟踪号
     * @return 跟踪信息
     */
    TrackingDTO getTracking(String trackingNumber);

    /**
     * 计算运费
     *
     * @param orderId 订单编号
     * @param weight 重量
     * @param destination 目的地
     * @return 运费
     */
    BigDecimal calculateFreight(Long orderId, BigDecimal weight, String destination);

    /**
     * 发货
     *
     * @param orderId 订单编号
     * @param providerId 物流服务商编号
     * @return 是否成功
     */
    Boolean ship(Long orderId, Long providerId);

    /**
     * 更新物流状态
     *
     * @param logisticsId 物流编号
     * @param status 状态
     * @return 是否成功
     */
    Boolean updateStatus(Long logisticsId, Integer status);

}
